JNA 调用动态链接库 您所在的位置:网站首页 jni dll JNA 调用动态链接库

JNA 调用动态链接库

2023-05-12 04:20| 来源: 网络整理| 查看: 265

前言

在一次实际项目中遇到了无法调用exe可执行文件,听说哥斯拉利用JNA技术实现了内存加载exe、执行命令等操作,特来实践一下。

JNA 基础知识

JNA全称:Java Native Access,是建立在JNI(Java Native Interface)技术之上的Java开源框架,JNA提供了一组Java工具类用于在运行期间动态访问的系统本地库。简单理解就是:JNA提供了一个"桥梁",可以利用Java代码直接访问动态链接库中的函数。

调用JNI接口

调用JNI接口的步骤为:

创建工程,将dll文件放到工程下

引入JNA相关的jar包

创建继承自Library类的接口

接口中创建对象用于加载DLL/SO的类库

接口中声明DLL/SO类库头文件中暴露的方法

调用该方法

编译DLL

以windows为例,使用Visual Studio 创建一个动态链接库的工程,并定义一个头文件testdll.h和源文件testdll.cpp。简单实现一个SayHello的方法创建testdll.cpp,作用是用来实现被声明的函数。

#include "pch.h" #include "testdll.h" void SayHello() { std::cout MyTest = urlClassLoader.loadClass("com.jna.jnatest"); Object instance = MyTest.newInstance(); Method method = MyTest.getMethod("show", String.class,String.class,String.class); Object ada = method.invoke(instance,shellcode, pathdll,dllname); } catch (Exception e){ out.println(e); } %>

以tomcat为例,shellcode 即将cobaltstrike的shellcode进行base64编码,base64dll 是base64编码dll动态链接库之后的值,dllname即是dll动态链接库的名称。测试可以正常上线执行命令。上线进程为java.exe。

image.png

总结

在学习JNA调用动态链接库的时候,借鉴了很多师傅的思路,但无奈赶不上师傅们的高度,只能用稍微复杂点的办法完善自己的代码,来曲折得实现效果。

参考资料

https://www.bilibili.com/video/BV16t411A7it/?spm_id_from=333.337.search-card.all.click&vd_source=0627d2723fb97773126096556cc98e0dhttps://www.cnblogs.com/happyhuangjinjin/p/17219986.htmlhttps://tttang.com/archive/1436/https://payloads.online/archivers/2022-08-11/1/



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有